﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentValidation;
using FluentValidation.Results;
using System.Windows.Forms;

namespace GestionePolveriLib.Validations
{
    public class MovimentoValidationArgsValidator : AbstractValidator<MovimentoValidationArgs>
    {
        public MovimentoValidationArgsValidator()
        {
            RuleFor(ma => ma.GiacenzaQuantitaImpegnataFlag).Equal(false).WithMessage("Attenzione!...Giacenza - Quantita Impegnata < 0");

            Custom(m =>
            {
                return (CheckFlags(m));
            });
        }

        private ValidationFailure CheckFlags(MovimentoValidationArgs mvarg)
        {
            ValidationFailure retValue = null;
            //bool retValue = true;

            if (mvarg.GiacenzaTotaleInsufficienteFlag)
            {
                //.......ERRORE: Giacenza totale insufficiente
                if (MessageBox.Show("Attenzione!...Giacenza totale insufficiente. Continuare?",
                                   "Conferma Aggiornamento", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return new ValidationFailure("GiacenzaTotaleInsufficienteFlag", "Attenzione!...Giacenza totale insufficiente.");
                    //return false;
                }
            }

            if (mvarg.GiacenzaLottoInsufficienteFlag)
            {
                //.......ERRORE: Giacenza lotto insufficiente
                if (MessageBox.Show("Attenzione!...Giacenza lotto insufficiente. Continuare?",
                    "Conferma Aggiornamento", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return new ValidationFailure("GiacenzaLottoInsufficienteFlag", "Attenzione!...Giacenza lotto insufficiente.");
                    //return false;
                }
            }

            if (mvarg.SottoScortaFlag)
            {
                //.......ERRORE: Sottoscorta
                if (MessageBox.Show("Attenzione!...Giacenza totale inferiore alla Scorta minima. Continuare?",
                                                         "Conferma Aggiornamento", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return new ValidationFailure("SottoScortaFlag", "Attenzione!...Giacenza totale inferiore alla Scorta minima.");
                    //return false;
                }
            }

            if (mvarg.LottoPiuVecchioSelezionatoFlag)
            {
                if (MessageBox.Show("Attenzione!...Non è stato selezionato il lotto più vecchio. Continuare?",
                                 "Conferma Aggiornamento", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return new ValidationFailure("LottoPiuVecchioSelezionatoFlag", "Attenzione!...Non è stato selezionato il lotto più vecchio.");
                    //return false;
                }
            }

            if (mvarg.LottoScadutoSelezionatoFlag)
            {
                if (MessageBox.Show("Attenzione!...E' stato selezionato un lotto scaduto. Continuare?",
                                                     "Conferma Aggiornamento", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return new ValidationFailure("LottoScadutoSelezionatoFlag", "Attenzione!...E' stato selezionato un lotto scaduto.");
                    //return false;
                }
            }

            return retValue;
        }
    }
}
